package com.web.service;


import com.web.pojo.domain.Device;
import com.web.pojo.domain.DeviceWorkParameters;
import com.web.pojo.dto.*;
import io.swagger.models.auth.In;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

public interface DeviceServer {
    /**
     * 添加设备信息
     * @param device 设备信息
     * @return 结果
     */
    public Integer insertDevice(Device device);

    //获得指定的设备属性
    public Device getDevice(String dev_eui);

    /**
     * 检查设备eui是否重复
     * @param deviceEui 设备eui
     * @return 结果
     */
    public Boolean checkDeviceEuiUnique(String deviceEui);

     /**
     * 检查设备addr是否重复
     * @param deviceAddr 设备addr
     * @return 结果
     */
    public Boolean checkDeviceAddrUnique(String deviceAddr);

    /**
     * 修改设备信息
     * @param device 设备信息
     * @return 结果
     */
    public Integer updateDevice(Device device);

    /**
     * 删除设备想
     * @param updateBy 删除者
     * @param deviceIds 设备Id
     * @return 结果
     */
    public Integer deleteDevice(String updateBy, List<Integer> deviceIds);

    /**
     * 查看设备详情
     * @param deviceId 设备id
     * @return 结果
     */
    public Device selectDeviceDetails(Integer deviceId);

    /**
     * 查看设备列表
     * @param str 查询条件
     * @return 结果
     */
    public List<Device> selectDeviceList(Integer userId,String str);

    /**
     * 根据地址查询设备
     * @param userId 用户id
     * @param addressId 地址
     * @return 结果
     */
    public List<Device> selectDeviceListByAddressId(Integer userId,Integer addressId);

    /**
     * 根据设备eui查询设备
     * @param deviceEui 设备eui
     * @return 结果
     */
    public Device selectDeviceByDeviceEui(String deviceEui);

    /**
     * 查看设备工作参数
     * @param deviceId 设备id
     * @return 结果
     */
    public DeviceWorkParameters selectDeviceWorkParameters(Integer deviceId);

    /**
     * 根据设备addr查询设备
     * @param deviceAddr 设备eui
     * @return 结果
     */
    public Device selectDeviceByDeviceAddr(String deviceAddr);

    /**
     * 设备入网
     * @param deviceId 设备id
     * @param NwkSKey NwkSKey
     * @param AppSKey AppSKey
     * @param gateWayEuiBytes 网关Eui
     * @return 结果
     */
    public Integer deviceJoin(Integer deviceId,byte[] NwkSKey,byte[] AppSKey,byte[] gateWayEuiBytes);

    /**
     * 根据id列表查询设备信息
     * @param deviceIds
     * @return
     */
    public List<Device> selectDeviceListByIds(List<Integer> deviceIds);

    /**
     * 查询已经入网的设备
     * @param dto 条件
     * @return 结果
     */
    public List<Device> selectRegisteredDeviceByAddressId(SelectRegisteredDeviceDTO dto);

    /**
     * 更新设备开关状态信息
     * @param dto 开关状态
     * @return 结果
     */
    public Integer updateDeviceSwitchState(SetSwitchStateDTO dto);


    /**
     * 更新设备开关控制状态信息
     * @param dto 开关控制状态
     * @return 结果
     */
    public Integer updateDeviceSwitchControlState(SetSwitchControlStateDTO dto);


    /**
     * 更新设备开关调关等级信息
     * @param dto 调关等级信息
     * @return 结果
     */
    public Integer updateDeviceSwitchDimmingLevel(SetSwitchDimmingLevelDTO dto);

    /**
     * 更新设备上报周期信息
     * @param dto 上报周期信息
     * @return 结果
     */
    public Integer updateDeviceSwitchReportingPeriod(SetSwitchReportingPeriodDTO dto);

    /**
     * 设备授权
     * @param ids 授权的Id
     * @param userId 用户id
     * @return 结果
     */
    public Integer authorizeDevice(List<Integer> ids, Integer userId);

    /**
     * 更改时间表信息
     * @param dto 时间表信息
     * @return 结果
     */
    public Integer replaceDeviceSwitchSchedule(SetSwitchScheduleDTO dto);
}
